package com.xuecheng.checkcode.context;

import com.xuecheng.checkcode.enums.CheckCodeType;
import com.xuecheng.checkcode.factory.CheckCodeServiceFactory;
import com.xuecheng.checkcode.model.CheckCodeResultDTO;
import com.xuecheng.checkcode.model.GenerateCheckCodeParamsDTO;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

/**
 * @author 勾新杰
 * @version 1.0
 * @description 策略模式
 * @date 2023/5/31 9:09
 */
@Component
@RequiredArgsConstructor
public class CheckCodeStrategyContext {

    /**
     * 验证码服务工厂
     */
    private final CheckCodeServiceFactory checkCodeServiceFactory;

    /**
     * 根据验证码类型选择不同的策略执行生成验证码
     * @param strategy 策略
     * @return 策略
     */
    public CheckCodeResultDTO generate(CheckCodeType strategy, GenerateCheckCodeParamsDTO checkCodeParamsDTO) {
        return checkCodeServiceFactory.getCheckCodeService(strategy).generate(checkCodeParamsDTO);
    }

    /**
     * 执行校验，所有类型的验证码校验逻辑都是一样的
     * @param key 验证码key
     * @param code 验证码
     * @return 校验结果
     */
    public boolean verify(String key, String code) {
        return checkCodeServiceFactory.getCheckCodeService(CheckCodeType.PIC).verify(key, code);
    }
}